package com.day18_predicate;

/**
 * @ClassName: Test01
 * @Author: zw
 * @Description: 出百万拳，行万里路；
 * @Create 2024/3/30-10:39
 * @Version 1.0
 */

import java.util.function.Predicate;

/***
 * predicate
 */
public class Test01 {
    public static void main(String[] args) {
        boolean b = checkString("hello", s -> {
            return s.length() > 8;
        });
        System.out.println(b);

        boolean b1 = checkString("hello", s -> {
            return s.startsWith("she");
        }, s1 -> {
            return s1.length() > 2;
        });
        System.out.println("and判断：" + b1);

        boolean b2 = checkString1("hello", s -> {
            return s.startsWith("she");
        }, s1 -> {
            return s1.length() > 2;
        });
        System.out.println("or判断：" + b2);
    }

    // 判断给定的字符串是否满足要求
    private static boolean checkString(String s, Predicate<String> pre) {
//        return pre.test(s); // 正常逻辑
        return pre.negate().test(s); // 逻辑取非
    }

    // 对同一个字符串做两个不同的条件判断
    //最后把这两个判断的结果做逻辑与运算作为最终结果
    private static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
        // 不用and
//        boolean b1 = pre1.test(s);
//        boolean b2 = pre1.test(s);
//        boolean result = b1 && b2;
//        return result;
        //使用and
        return pre1.and(pre2).test(s);
    }
    // 对同一个字符串做两个不同判断，最后返回两个判断的逻辑or
    private static boolean checkString1(String s, Predicate<String> pre1, Predicate<String> pre2) {
        // 不用and
//        boolean b1 = pre1.test(s);
//        boolean b2 = pre1.test(s);
//        boolean result = b1 && b2;
//        return result;
        //使用and
        return pre1.or(pre2).test(s);
    }

}
